package com.btm.qiaoqiang.ruleadp;

/**
 * 系统使用的关键词
 */
public enum EnumKeyChar {

    // 一个特殊的默认值，没有解析到任何的关键词符号，则返回此默认的
    DEFAULT(null, false),
    AT('@', true),
    GREATER_THAN('>', false),
    LESS_THAN('<', false),
    EQUALS('=', false),
    NOT('!', false),
    OR('|', true),
    AND('&', true),
    LEFT_BRACKET('(', true),
    RIGHT_BRACKET(')', true),
    // 转义符
    TRANSLATION('\\', false),
    PLUS('+', false),
    REDUCE('-', false),
    ;
    private Character keyChar;
    private boolean splitKey;

    public char getChar() {
        return this.keyChar;
    }

    EnumKeyChar(Character keyChar, boolean splitKey) {
        this.keyChar = keyChar;
        this.splitKey = splitKey;
    }

    public static EnumKeyChar getKeyCharByChar(char keyChar) {
        for (EnumKeyChar key : EnumKeyChar.values()) {
            if (!key.equals(EnumKeyChar.DEFAULT) && key.keyChar == keyChar) {
                return key;
            }
        }
        return DEFAULT;
    }

    /**
     * 字符是否为系统使用的关键词之一
     * @param word 待辨别的字符
     * @return true：是；false：否
     */
    public static boolean isKeyChar(char word) {
        for (EnumKeyChar key : EnumKeyChar.values()) {
            if (!key.equals(EnumKeyChar.DEFAULT) && key.keyChar == word) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否为用于分割条件项的系统关键词
     * @param word
     * @return
     */
    public static boolean isSplitKeyChar(char word) {
        return getKeyCharByChar(word).splitKey;
    }
}
